# _*_ coding:utf-8 _*_
# 开发团队: Mavericks
# 开发人员：Maverick·Ming
# 开发IDE： PyCharm
#   项目名：DouBanSpider
#   文件名：testUrllib.py
# 开发时间：2021/3/31 8:52

# 获取一个get请求
import urllib.request
# response = urllib.request.urlopen('http://www.baidu.com')  # 将访问网页的源码封装到对象里
# print(response.read().decode('utf-8'))  # 对获取的源码进行utf-8解码

# 获取一个post请求
# httpbin.org
import urllib.parse  # 解析器
# data = bytes(urllib.parse.urlencode({"hello":"world"}), encoding='utf-8')
# response = urllib.request.urlopen('http://httpbin.org/post', data=data)
# print(response.read().decode('utf-8'))  # 对获取的源码进行utf-8解码
# 结果：urllib.error.HTTPError: HTTP Error 405: METHOD NOT ALLOWED
# 解析：不允许直接访问，需要封装一些表单数据才可以post方式访问

# 超时处理（可能反爬、链接错误、服务器问题）
# try:
#     response = urllib.request.urlopen('http://httpbin.org/get', timeout=0.01)  # 将访问网页的源码封装到对象里
#     print(response.read().decode('utf-8'))  # 对获取的源码进行utf-8解码
# except urllib.error.URLError as e:
#     print('time out')

# response = urllib.request.urlopen('http://httpbin.org/get')  # 无反爬的网站
# response = urllib.request.urlopen('http://douban.com')  # 反爬的网站
# print(response.status)  # 状态码
# 结果：    raise HTTPError(req.full_url, code, msg, hdrs, fp)
# urllib.error.HTTPError: HTTP Error 418 【418是一个梗，说明知道你是爬虫】

from pprint import pprint
# response = urllib.request.urlopen('http://www.baidu.com')  # 响应头部列表，用户向服务端发送
# pprint(response.getheaders())  # 全部响应值
# print(response.getheader('Server'))  # 只获取其中一个，getheader(key)

# 如果要躲过反爬，必须伪装成浏览器，如何伪装呢,得把请求对象重新封装以下
url = 'https://httpbin.org/post'
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
}

data = bytes(urllib.parse.urlencode({'name':'eric'}),encoding='utf-8')
# 请求对象
req = urllib.request.Request(url=url, data=data, headers=headers, method='POST')
print(req)
# 响应对象
response = urllib.request.urlopen(req)
print(response.read().decode('utf-8'))

# 如果要躲过反爬，必须伪装成浏览器，如何伪装呢,得把请求对象重新封装以下
url = 'https://www.douban.com'
headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
}
req = urllib.request.Request(url=url, headers=headers)
response = urllib.request.urlopen(req)
print(response.read().decode('utf-8'))
